/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Controlador.Service.Ventas;

import Controlador.Bean.Log.Log;
import Controlador.Bean.Ventas.Facturacion;
import Controlador.Bean.Ventas.FacturacionBusqueda;
import Data.config.SessionFac;
import gui.General.Main;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.apache.ibatis.session.SqlSession;

/**
 *
 * @author Luis Enrique
 */
public class ServicioFacturacion {
    
    java.text.SimpleDateFormat sdf=new java.text.SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
    Date fecha= new Date();
    String f=sdf.format(fecha);
    
    private ServicioFacturacion() {};
    
    static private ServicioFacturacion servicioFacturacion=null; 
		   
    public static ServicioFacturacion getInstance(){    
        if(servicioFacturacion==null) servicioFacturacion= new ServicioFacturacion();
        return servicioFacturacion;
    }   
          
    public String getCodFacturacion(Facturacion fact){
        String codigo;
        try(SqlSession sqlsesion=SessionFac.SessionFactory().openSession()){
            if(fact.getTipo().equals("Boleta")){
                codigo = sqlsesion.selectOne("Data.Ventas.ServicioFacturacion.getCodFacturacionBOL");			
                sqlsesion.close();
            }
            else{
                codigo = sqlsesion.selectOne("Data.Ventas.ServicioFacturacion.getCodFacturacionFAC");
                sqlsesion.close();
            }                
        }
        if(codigo!=null){
            int cod= Integer.parseInt(codigo.substring(3))+1;
            String defecto= "000000";
            String temp= defecto.substring(0, defecto.length()-String.valueOf(cod).length()).concat(String.valueOf(cod));
            return codigo.substring(0,3).concat(temp);
        }
        else
            if(fact.getTipo().equals("Boleta")){
                return ("BOL000001");
            }
            else{
                return ("FAC000001");
            }            
    }
    
    public synchronized void registrarFacturacion(Facturacion fc){
        try(SqlSession sqlsesion=SessionFac.SessionFactory().openSession()){
            sqlsesion.insert("Data.Ventas.ServicioFacturacion.insertFacturacion",fc);
            sqlsesion.commit();
            sqlsesion.close();
            Log.setInstancia(Main.usu.getIdEmpleadoAdm(),"VNTFACTR","Registrar Facturación",f);
        }
    }
    
    public ArrayList<FacturacionBusqueda> seleccionarAllDocs(){
        ArrayList<FacturacionBusqueda> docs;
        try(SqlSession sqlsesion=SessionFac.SessionFactory().openSession()){
            List<FacturacionBusqueda> temp = (List)sqlsesion.selectList("Data.Ventas.ServicioFacturacion.getAllDocs");			
            docs = new ArrayList(temp);
            sqlsesion.close();
            //Log.setInstancia(Main.usu.getIdEmpleadoAdm(),"VNTFACTR","Seleccionar Documentos de Venta",f);
        }
        return docs;
    }
    
    public ArrayList<FacturacionBusqueda> seleccionarDocs (FacturacionBusqueda docBusqueda){
        ArrayList<FacturacionBusqueda> docs;
        try(SqlSession sqlsesion=SessionFac.SessionFactory().openSession()){
            List<FacturacionBusqueda> temp = (List)sqlsesion.selectList("Data.Ventas.ServicioFacturacion.getDocs",docBusqueda);			
            docs = new ArrayList(temp);
            sqlsesion.close();
            Log.setInstancia(Main.usu.getIdEmpleadoAdm(),"VNTFACTR","Seleccionar Documentos de Venta",f);
        }
        return docs;
    }
    
    public String getCodCotizacion(String codigo){
        try(SqlSession sqlsesion=SessionFac.SessionFactory().openSession()){
            codigo = sqlsesion.selectOne("Data.Ventas.ServicioFacturacion.getCodCotizacion",codigo);			
            sqlsesion.close();           
        }
        return codigo;
    }
    
    public ArrayList<FacturacionBusqueda> seleccionarAllDocsFact(){
        ArrayList<FacturacionBusqueda> docs;
        try(SqlSession sqlsesion=SessionFac.SessionFactory().openSession()){
            List<FacturacionBusqueda> temp = (List)sqlsesion.selectList("Data.Ventas.ServicioFacturacion.getAllDocsFact");			
            docs = new ArrayList(temp);
            sqlsesion.close();
            Log.setInstancia(Main.usu.getIdEmpleadoAdm(),"VNTFACTR","Seleccionar Documentos de Venta",f);
        }
        return docs;
    }
    
    public ArrayList<FacturacionBusqueda> seleccionarDocsFact (FacturacionBusqueda docBusqueda){
        ArrayList<FacturacionBusqueda> docs;
        try(SqlSession sqlsesion=SessionFac.SessionFactory().openSession()){
            List<FacturacionBusqueda> temp = (List)sqlsesion.selectList("Data.Ventas.ServicioFacturacion.getDocsFact",docBusqueda);			
            docs = new ArrayList(temp);
            sqlsesion.close();
            Log.setInstancia(Main.usu.getIdEmpleadoAdm(),"VNTFACTR","Seleccionar Documentos de Venta",f);
        }
        return docs;
    }
}
